home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / gfx / misc / gnuplot-3.7src.lha / gnuplot-3.7src / gnuplot-3.7.lha / gnuplot-3.7 / NeXT / Controller.m < prev    next >
Text File  |  1998-04-15  |  5KB  |  232 lines

  1. #import <defaults/defaults.h>
  2. #import "Controller.h"
  3. #import "gnuviewController.h"
  4. #import "GnuView.h"
  5.  
  6.  
  7. @implementation Controller
  8.  
  9. - (id) activeTerm
  10. {
  11.     return activeTerm;
  12. }
  13.  
  14.  
  15. - appDidInit:sender
  16. {
  17.     id prInfo;
  18.     NXRect *paperRect;
  19.  
  20.     static NXDefaultsVector GnuTermDefaults = {
  21.         {"Width", "400"}, 
  22.         {"Height", "300"},
  23.         {"Backing", "Buffered"},
  24.         {NULL}
  25.     };
  26.  
  27.  
  28.     activeTerm = keyTerm = nil;
  29.  
  30.     myConnection = [NXConnection registerRoot:self withName:"gnuplotServer"];
  31.     [myConnection runFromAppKit];
  32.  
  33.     prInfo = [NXApp printInfo];
  34.     paperRect = (NXRect *) [prInfo paperRect];
  35.     [prInfo setOrientation:NX_LANDSCAPE andAdjust:YES];
  36.     [prInfo setHorizCentered:YES];
  37.     [prInfo setVertCentered:YES];
  38.  
  39.                                 /* Get user Preferences */
  40.     NXRegisterDefaults("GnuTerm", GnuTermDefaults);
  41.  
  42.     [DefaultSize setStringValue:NXGetDefaultValue("GnuTerm","Width") at:0];
  43.     [DefaultSize setStringValue:NXGetDefaultValue("GnuTerm","Height") at:1];
  44.         
  45.     if (!strcmp(NXGetDefaultValue("GnuTerm","Backing"), "Buffered")) {
  46.         backing = NX_BUFFERED;
  47.         [useBufferedSwitch setState:YES];
  48.     }
  49.     else {
  50.         backing = NX_RETAINED;
  51.         [useBufferedSwitch setState:NO];
  52.     }
  53.  
  54.     gvList = [[List new] initCount:10];
  55.  
  56.     return self;
  57. }
  58.  
  59. - newGnuTerm:sender
  60. {
  61.     NXRect frame;
  62.                     
  63.     if ([gvList indexOf:keyTerm] != NX_NOT_IN_LIST) {
  64.         [[keyTerm window] getFrame: &frame];
  65.         NX_X(&frame) += 24;
  66.         NX_Y(&frame) -= 24;
  67.     }
  68.     else {
  69.         NX_WIDTH(&frame) =     atof(NXGetDefaultValue("GnuTerm","Width"));
  70.         NX_HEIGHT(&frame) = atof(NXGetDefaultValue("GnuTerm","Height"));
  71.         NX_X(&frame) = 200;
  72.         NX_Y(&frame) = 350;    
  73.     }
  74.  
  75.     if ([NXApp loadNibSection: "gnuview.nib" owner: self] == nil) {
  76.         return nil;
  77.     }
  78. //    fprintf(stderr,"newGnuTerm: %g x %g\n",NX_WIDTH(&frame),NX_HEIGHT(&frame));
  79.     
  80.     [[activeTerm window] setBackingType:backing];
  81.     [[activeTerm window] placeWindowAndDisplay: &frame];
  82.     [self setKeyTerm:activeTerm];
  83.         
  84.     [gvList addObject:activeTerm];
  85.     ++wcnt;
  86.         
  87.     return activeTerm;
  88. }
  89.  
  90.  
  91. - setActiveTerm:(id) newTerm
  92. {
  93.     if (activeTerm != nil) [activeTerm deactivate:self];
  94.     
  95.     activeTerm = newTerm;
  96.     [activeTerm GVactivate:self];
  97.     
  98.     return self;
  99. }
  100.  
  101. - printPScodeInKey:sender
  102. {
  103.     [[keyTerm gnuView] printPSCode:sender];
  104.  
  105.     return self;
  106.  
  107.  
  108. }
  109.  
  110. - setKeyTerm:newTerm
  111. {    
  112.     keyTerm = newTerm;
  113.  
  114.     [NameField setStringValue:[[keyTerm window] title]];
  115.     [NameField selectText:self];
  116.         
  117.     return self;
  118. }
  119.  
  120. - setKeyTitle:sender
  121. {
  122.     [[keyTerm window] setTitle:[NameField stringValue]];
  123.     [[NameField window] performClose:self];
  124.     return self;
  125. }
  126.  
  127. -  executePScode:(char *)PSstring termTitle:(char *)title
  128. {
  129.     int i, cnt;
  130.     id test;
  131.     char buf[50];
  132.     
  133.     //fprintf(stderr, "Request for window: %s\n", title);
  134.  
  135.     if (*title) {        
  136.                                         /* If the window exists, use it */
  137.         cnt = [gvList count];
  138.         for (i=0; i < cnt; ++i) {
  139.             test = [gvList objectAt:i];
  140.             if ( !strcmp([[test window] title], title)) {
  141.                 if (test != activeTerm) [self setActiveTerm:test];
  142.                 break;
  143.             }
  144.         }    
  145.                                         /* O.K., it doesn't exist, what now? */
  146.         if (i == cnt) {
  147.             [self newGnuTerm:self];
  148.             [[activeTerm window] setTitle: title];
  149.         }
  150.     }
  151.     else {
  152.         if (activeTerm == nil) {
  153.             [self newGnuTerm:self];
  154.             sprintf(buf, "gnuplot %d", wcnt);
  155.             [[activeTerm window] setTitle: buf];
  156.         }
  157.     }
  158.     
  159.     
  160.     [[activeTerm window] makeKeyAndOrderFront: nil];
  161.     [[activeTerm gnuView] executePS:PSstring];
  162.  
  163.     return activeTerm;
  164. }
  165.  
  166. - termWillClose:sender
  167. {
  168.     [gvList removeObject:sender];
  169.     if (activeTerm == sender) activeTerm =nil;
  170.  
  171.     return self;
  172. }
  173.  
  174. - setDefaultGTSize:sender
  175. {
  176.     NXRect frame;
  177.  
  178.     if (sender == useKeyButton) {
  179.         fprintf(stderr, "useKey\n");        
  180.         if ([gvList indexOf:keyTerm] != NX_NOT_IN_LIST) {
  181.             [[keyTerm window] getFrame: &frame];
  182.             [DefaultSize setFloatValue:NX_WIDTH(&frame) at:0];
  183.             [DefaultSize setFloatValue:NX_HEIGHT(&frame) at:1];
  184.         }
  185.     }
  186.  
  187.     NXWriteDefault("GnuTerm", "Width",  [DefaultSize stringValueAt:0]);
  188.     NXWriteDefault("GnuTerm", "Height", [DefaultSize stringValueAt:1]);
  189.  
  190.     
  191.     fprintf(stderr, "setDefaultGTSize: %s x %s\n", 
  192.         [DefaultSize stringValueAt:0],[DefaultSize stringValueAt:1]);
  193.  
  194.     return self;
  195. }
  196.  
  197. - setUseBuffered:sender
  198. {
  199.     if ([sender state] == YES) {
  200.         backing = NX_BUFFERED;
  201.         NXWriteDefault("GnuTerm", "Backing", "Buffered");
  202.     }
  203.     else {
  204.         backing = NX_RETAINED;
  205.         NXWriteDefault("GnuTerm", "Backing", "Retained");
  206.     }
  207.     [[activeTerm window] setBackingType:backing];
  208.  
  209.  
  210.     return self;
  211. }
  212.  
  213.  
  214. - closeAll:sender
  215. {    
  216.     while([gvList count]) [[[gvList objectAt:0] window] performClose:self];
  217.     return self;
  218. }
  219. - miniaturizeAll:sender
  220. {
  221.     int i, cnt;
  222.     
  223.     cnt = [gvList count]; 
  224.  
  225.     for (i=0; i < cnt; ++i)
  226.         [[[gvList objectAt:i] window] performMiniaturize:self];
  227.  
  228.     return self;
  229. }
  230.  
  231. @end
  232.